//
//  YMSUserinfoViewModel.swift
//  YMSWeibo
//
//  Created by 杨茂盛 on 2016/11/15.
//  Copyright © 2016年 杨茂盛. All rights reserved.
//

import UIKit

class YMSUserinfoViewModel: NSObject {
    //viewModel(视图模型)是用来处理数据逻辑的 需要引用模型对象
    var userAccount : YMSUserinfoModel?
    
    

    //单例对象,全局应该只有一个登陆的用户,存储一个用户的plist文件,当注销之后要删除plist文件
    static let shared:YMSUserinfoViewModel = YMSUserinfoViewModel()
    
    //重写构造函数,在用户已经登录的情况下给模型赋值
    override  init() {
        super.init()
        //保证以后再判断是否登录的时候,不访问磁盘, 将磁盘数据保存到内存中
        userAccount = self.loadUserAccount()
        
    }
    
    //增加一个用户纯种URL类型的头像地址
    var headURL: URL? {
        return URL(string: userAccount?.avatar_large ?? "")
    }
    
    var access_token: String? {
        return userAccount?.access_token
    }
    //判断用户是否登录
    //计算型属性
    var userLogin:Bool {
        //判断满足条件
        if userAccount?.access_token != nil && isExpires == false {
            return true
        }
        return false
    }
    //判断令牌是否过期
    var isExpires:Bool {
        //判断满足条件 只要日期大于当前的日期就没有过期
        if userAccount?.expires_date?.compare(Date()) == ComparisonResult.orderedDescending {
            return false
        }
        return true
    }
    //获取用户token (获取授权)
    func loadAccessToken(code:String,finished:@escaping (Bool) -> ()){
        let urlString = "https://api.weibo.com/oauth2/access_token"
        let parameters = ["client_id":"1452064863","client_secret":client_secret,"grant_type":"authorization_code","code":code,"redirect_uri":redirect_uri]
        YMSNetWorkToll.shared.request(method: .POST, urlString: urlString, parameters: parameters) {
            (responsed, error) in
            
            
            if error != nil {
                finished(false)
            return
            }
            
            //走到这里一定请求成功
            //使用access_token和uid来请求用户信息
            self .loadUserInfo(dict:responsed as! [String:Any], loadUserInfoFinished: finished)
        }
    }
    //请求用户信息
    func loadUserInfo(dict:[String:Any],loadUserInfoFinished:@escaping (Bool) -> ()){
        
        let urlString = "https://api.weibo.com/2/users/show.json"
        let token = dict["access_token"]
        let uid = dict["uid"]
        let parameters = ["access_token":token,"uid":uid]
        YMSNetWorkToll.shared.request(method: .GET, urlString: urlString, parameters: parameters) {
            (responsed, error) in
            
            if error != nil{
            loadUserInfoFinished(false)
                print("请求失败")
                return
            }
            //走到这里说明请求成功,就把用户的信息保存到本地
            //需要将授权得到的字典和用户信息字典合并,之后再保存
            var userInfoDict = responsed as! [String:Any]
//            print(responsed)
            for (key,value) in dict{
            userInfoDict[key] = value
            }
            //需要将userInfoDict转换为模型对象
            //用归档的方式存储自定义模型对象
            let userAccount1 = YMSUserinfoModel(dict: userInfoDict)
            self.saveUserAccount(userAccount: userAccount1)
            //给单例对象的模型赋值,如果不赋值,首次登录的时候有bug
            self.userAccount = userAccount1
            //执行成功的回调
            loadUserInfoFinished(true)
        }
    }
    //存储模型对象
    func saveUserAccount(userAccount:YMSUserinfoModel){
        //不能存在temp目录.因为不会同步备份用户信息
        //拼接文件路径的方法swift没有,要先转换为NSString
        //存储自定义的对象,对象必须遵守code协议
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: Userpath)
        //print(Userpath)
    }
    //读取模型对象
    func loadUserAccount() -> YMSUserinfoModel?{
        //调用解档的方法
        let account = NSKeyedUnarchiver.unarchiveObject(withFile: Userpath)
        if let myAccount = account as? YMSUserinfoModel {
            return myAccount
        }
        return nil
    }
    
}
